import { getNewsList } from '@/services'
import { IHomeState, INewsInfo, IPostData } from '@/typings'
import { Commit } from 'vuex'
import * as actionTypes from './actionTypes'

export default {
    // 设置news数据的方法
    [actionTypes.SET_NEWS_LIST]({ commit, state }: { commit: Commit, state: IHomeState }, options: IPostData) {
        const { isLoading, hasMore, pageNum } = state.newsList
        // 如果isLoading是真，说明已经是正在请求数据的状态了，则不让另外的请求再去发起
        if(isLoading) return;
        //  如果hasMore为假，表示没有更多数据了，则不让请求发起
        if (!hasMore) return;
        // 这里表示的是，如果是第0页,就不请求数据，因为第0页我们要用骨架屏的，正在加载中的状态也不显示
        // 不是第0页的情况下，才去请求数据,并且要显示正在加载中的状态
        if(pageNum) {
            commit(actionTypes.SET_LOADING, true)
        }
        
        // 请求数据，返回的数据的类型是 INewsInfo[]
        getNewsList<INewsInfo[]>(options).then(data => {
            // console.log('actions`data:', data)
            commit(actionTypes.SET_NEWS_LIST, data)
        }).catch(err => {
            throw err;
        })
    }
}